import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';

// 小型本地数据库
// 将来im 页面要用到 本地储存历史聊天记录
// 本地缓存图片 同一个地址优先从缓存中获取
class Sqflite {
  static Sqflite _instance = Sqflite._internal();
  Database db;
  String _dbName = 'flutter.db'; //数据库名称
  //单例模式
  factory Sqflite() => _instance;

  //第一次使用时初始化
  Sqflite._internal() {
    if (db == null) {
      _createDb();
    }
  }

  ///创建数据库db
  _createDb() async {
    int _dbVersion = 1; //数据库版本
    //获取数据库路径
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, _dbName);

    //打开数据库
    db = await openDatabase(path, version: _dbVersion,
        onUpgrade: (Database db, int oldVersion, int newVersion) async {
      //数据库升级,只回调一次
    }, onCreate: (Database db, int vers) async {
      //创建表，只回调一次
      String _createTableSQL1 =
          'CREATE TABLE table1 (id INTEGER PRIMARY KEY, url TEXT,validTime INTEGER,con TEXT)'; //创建表1
      String _createTableSQL2 =
          'CREATE TABLE table2 (id INTEGER PRIMARY KEY, name TEXT,age INTEGER)'; //创建表2
      await db.execute(_createTableSQL1);
      await db.execute(_createTableSQL2);
    });
  }

  ///查全部
  Future<List<Map<dynamic, dynamic>>> query(String sql) async {
    return await db.rawQuery(sql);
  }

  ///改
  Future<int> update(String sql, List arg) async {
    return await db.rawUpdate(sql, arg); //修改条件，对应参数值
  }

  ///删
  Future<int> delete(String sql) async {
    return await db.rawDelete(sql);
  }

  ///增
  Future<int> add(String sql) async {
    print(db == null);
    int count = -1;
    await db.transaction((txn) async {
      count = await txn.rawInsert(sql);
    });
    return count;
  }

  Future<void> close(String sql) async {
    db.close();
  }
}
